home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / blackbox.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1984-04-24  |  33.1 KB  |  1,335 lines

  1. 10  LOCATE 1,1,0
  2. 20  SCREEN 0,0,0
  3. 30  WIDTH 80
  4. 40  COLOR 7,0
  5. 50  ON KEY(1) GOSUB 150:KEY(1) ON
  6. 60  ON KEY(2) GOSUB 150:KEY(2) ON
  7. 70  ON KEY(3) GOSUB 150:KEY(3) ON
  8. 80  ON KEY(4) GOSUB 150:KEY(4) ON
  9. 90  ON KEY(5) GOSUB 150:KEY(5) ON
  10. 100  ON KEY(6) GOSUB 150:KEY(6) ON
  11. 110  ON KEY(7) GOSUB 150:KEY(7) ON
  12. 120  ON KEY(8) GOSUB 150:KEY(8) ON
  13. 130  ON KEY(9) GOSUB 150:KEY(9) ON
  14. 140  ON KEY(10) GOSUB 150:KEY(10) ON:GOTO 160
  15. 150  RETURN
  16. 160  KEY OFF
  17. 170  CLS:GOTO 270
  18. 180  OPEN "blkbx1" AS 1 LEN=128
  19. 190  OPEN "blkbx1" AS 2 LEN=128
  20. 200  FIELD 1,100 AS Q$
  21. 210  FIELD 2,2 AS Q$(1)
  22. 220  LSET Q$="record to initialize the file"
  23. 230  LSET Q$(1)=MKI$(-1)
  24. 240  PUT 1,2
  25. 250  PUT 2,1
  26. 260  CLOSE:RETURN
  27. 270  PRINT TAB(25) "BLACK BOX"
  28. 280  PRINT :PRINT TAB(5) "A PROGRAM CREATED BY:"
  29. 290  PRINT TAB(20) "David W. Gulliksen"
  30. 300  PRINT TAB(20) "290 Allyndale Drive"
  31. 310  PRINT TAB(20) "Stratford, Conn. 06497"
  32. 320  PRINT TAB(20) "Copyright: March 30, 1982"
  33. 330  LOCATE 15,10,0,11,12:PRINT "Press any key to start the game."
  34. 340  STRT$=INKEY$:IF STRT$="" THEN 340
  35. 350  DIM C(17)
  36. 360  BL$="                                                                               "
  37. 370  CLS
  38. 380  LOCATE 10,10,0
  39. 390  PRINT "Do you need instructions (Y/N)?";
  40. 400  B$=INKEY$: IF B$="" THEN 400
  41. 410  IF B$="y" OR B$="Y" OR B$="n" OR B$="N" THEN 420 ELSE 400
  42. 420  IF B$="y" OR B$="Y" THEN GOSUB 1080
  43. 430  CLS
  44. 440  LOCATE 10,10,0
  45. 450  RANDOMIZE
  46. 460  CLS
  47. 470  LOCATE 10,10,0
  48. 480  PRINT "How many rocks do want you the computer to hide (0-9)?"
  49. 490  PRINT :PRINT TAB(17) "(Pressing `X' will end the game.)
  50. 500  B$=INKEY$:IF B$="" THEN 500
  51. 510  IF B$="0" THEN 8000
  52. 520  IF B$="X" OR B$="x" THEN LOCATE ,,1,11,12:CLS:CHAIN "MENU.BAS"
  53. 530  IF ASC(B$)>48 AND ASC(B$)<58 THEN 540 ELSE 500
  54. 540  CLS:B=VAL(B$):F=B
  55. 550  WHILE B>0
  56. 560  ROW=INT(RND*8+1)
  57. 570  COL=INT(RND*8+1)
  58. 580  IF B(ROW,COL)=-1 THEN 560
  59. 590  B(ROW,COL)=-1
  60. 600  B=B-1
  61. 610  WEND
  62. 620  RESTORE
  63. 630  FOR COL=1 TO 8
  64. 640  B(0,COL)=33-COL
  65. 650  B(9,COL)=8+COL
  66. 660  NEXT COL
  67. 670  FOR ROW=1 TO 8
  68. 680  B(ROW,0)=ROW
  69. 690  B(ROW,9)=25-ROW
  70. 700  NEXT ROW
  71. 710  FOR I=1 TO 17
  72. 720  READ C(I)
  73. 730  NEXT I
  74. 740  DATA 64,35,36,37,42,43,157,155,232,247,4,14,234,251,21,240,206
  75. 750  GUESS=0
  76. 760  LOCATE 3,29,0
  77. 770  PRINT "32 31 30 29 28 27 26 25"
  78. 780  FOR I=1 TO 8
  79. 790  READ A$
  80. 800  PRINT TAB(26) A$;
  81. 810  READ A$
  82. 820  PRINT TAB(54) A$
  83. 830  NEXT I
  84. 840  DATA "01","24","02","23","03","22","04","21","05","20","06","19","07",               "18","08","17"
  85. 850  PRINT TAB(29) "09 10 11 12 13 14 15 16"
  86. 860  IF CRE=2 THEN RETURN
  87. 870  LOCATE 7,1
  88. 880  COLOR 7,1
  89. 890  IF F=1 THEN 900 ELSE PRINT F;"Rocks are hidden.":GOTO 910
  90. 900  PRINT F;"Rock is hidden."
  91. 910  LOCATE 15,1
  92. 920  PRINT TAB(20) "A. Review instructions.                                      ";
  93. 930  PRINT TAB(20) "B. Place a rock on the screen.                               ";
  94. 940  PRINT TAB(20) "C. Remove a rock from the screen.                            ";
  95. 950  PRINT TAB(20) "D. Trace a path on the screen.                               ";
  96. 960  PRINT TAB(20) "E. Ask for a clue.                                           ";
  97. 970  PRINT TAB(20) "F. Enter the screen display as your solution.                ";
  98. 980  PRINT TAB(20) "G. Ask for the solution.                                     ";
  99. 990  PRINT TAB(80)
  100. 1000  PRINT TAB(20) "Please type the letter of the function you want:             ";
  101. 1010  B$=INKEY$:IF B$="" THEN 1010
  102. 1020  IF ASC(B$)<65 OR (ASC(B$)>71 AND ASC(B$)<97) OR ASC(B$)>103 THEN 1010
  103. 1030  IF ASC(B$)<97 THEN 1060
  104. 1040  ON (ASC(B$)-96) GOSUB 1080,2420,3130,3450,5340,7310,7690
  105. 1050  GOTO 910
  106. 1060  ON (ASC(B$)-64) GOSUB 1080,2420,3130,3450,5340,7310,7690
  107. 1070  GOTO 910
  108. 1080  IF SCREEN(3,29)<>51 THEN CLS ELSE GOSUB 15030
  109. 1090  LOCATE 25,1
  110. 1100  PRINT "Press the space bar to continue or `X' to end instructions.";
  111. 1110  LOCATE 1,1
  112. 1120  PRINT TAB(30) "BLACK BOX INSTRUCTIONS"
  113. 1130  RESTORE 840
  114. 1140  LOCATE 3,29
  115. 1150  PRINT "32 31 30 29 28 27 26 25"
  116. 1160  FOR I=1 TO 8
  117. 1170  READ A$
  118. 1180  LOCATE I+3,26:PRINT A$;
  119. 1190  READ A$
  120. 1200  PRINT TAB(54) A$
  121. 1210  NEXT I
  122. 1220  PRINT TAB(29) "09 10 11 12 13 14 15 16"
  123. 1230  LOCATE 15,1
  124. 1240  PRINT "     Black Box is a game of deduction.  The computer hides a number of rocks    (";CHR$(2);") on the grid above and your task is to find them."
  125. 1250  PRINT "     This is done by asking the computer for `clues'.  The clue must be for a   number 1 through 32.  The computer replies with an answer, which may be `HIT!', `Reflection!' or another number.
  126. 1260  PRINT "     The computer arrives at an answer by sending an X-ray into the grid from   the number you call, and by virtue of the way the ray behaves in the grid, the  answer is deduced."
  127. 1270  B$=INKEY$:IF B$<>" " AND B$<>"x" AND B$<>"X" THEN 1270
  128. 1280  IF B$<>" " THEN 2290
  129. 1290  GOSUB 15030
  130. 1300  LOCATE 15,1
  131. 1310  PRINT "     A ray will always go straight unless `deflected' from a rock."
  132. 1320  LOCATE 4,35
  133. 1330  PRINT "(";CHR$(2);")"
  134. 1340  LOCATE 4,47
  135. 1350  PRINT "(";CHR$(2);")"
  136. 1360  LOCATE 5,29
  137. 1370  FOR I=1 TO 4
  138. 1380  PRINT "SOUND";:FOR J=1 TO 100:NEXT J
  139. 1390  NEXT I
  140. 1400  PRINT "COLOR"
  141. 1410  FOR I=6 TO 11
  142. 1420  LOCATE I,33
  143. 1430  PRINT "CALL"
  144. 1440  FOR J=1 TO 300:NEXT J
  145. 1450  NEXT I
  146. 1460  FOR I=11 TO 6 STEP -1
  147. 1470  LOCATE I,39
  148. 1480  PRINT "CALL"
  149. 1490  FOR J=1 TO 300:NEXT J
  150. 1500  NEXT I
  151. 1510  LOCATE 5,39:PRINT "VARPTR"
  152. 1520  FOR I=40 TO 44
  153. 1530  LOCATE 5,I
  154. 1540  PRINT "SOUND";
  155. 1550  FOR J=1 TO 100:NEXT J
  156. 1560  NEXT I
  157. 1570  PRINT "COLOR"
  158. 1580  FOR I=6 TO 11
  159. 1590  LOCATE I,45
  160. 1600  PRINT "CALL"
  161. 1610  FOR J=1 TO 300:NEXT J
  162. 1620  NEXT I
  163. 1630  LOCATE 16,1
  164. 1640  PRINT "    This will happen because a ray is not permitted to pass by a rock in the    adjacent row or column.  When this would occur, the ray deflects away at right"
  165. 1650  PRINT "angles to its previous path and away from the rock (#02,#10)."
  166. 1660  PRINT "     This may involve only one rock, or a series of rocks to cause the ray to   exit at virtually any location, depending on the rocks' positions (#12,#14)."
  167. 1670  B$=INKEY$:IF B$<>" " AND B$<>"x" AND B$<>"X" THEN 1670
  168. 1680  IF B$<>" " THEN 2290
  169. 1690  GOSUB 15030:GOSUB 15080
  170. 1700  LOCATE 15,1
  171. 1710  PRINT "    A `HIT!' may occur in one of two ways:"
  172. 1720  LOCATE 6,50
  173. 1730  PRINT "(";CHR$(2);")"
  174. 1740  LOCATE 6,29
  175. 1750  FOR I=1 TO 20
  176. 1760  PRINT "SOUND";
  177. 1770  FOR J=1 TO 100:NEXT J
  178. 1780  NEXT I
  179. 1790  PRINT "*"
  180. 1800  LOCATE 16,1
  181. 1810  PRINT "        a: A ray may come from a number and hit a rock head on (#03)."
  182. 1820  PRINT "        b: A ray may not be able to enter onto the board because a rock                    is in the way (#22)."
  183. 1830  B$=INKEY$:IF B$<>" " AND B$<>"x" AND B$<>"X" THEN 1830
  184. 1840  IF B$<>" " THEN 2290
  185. 1850  GOSUB 15030:GOSUB 15080
  186. 1860  LOCATE 15,1
  187. 1870  PRINT "    A `Reflection!' also may occur in one of two ways:"
  188. 1880  LOCATE 8,50
  189. 1890  PRINT "(";CHR$(2);")"
  190. 1900  LOCATE 7,29
  191. 1910  FOR I=1 TO 20
  192. 1920  PRINT "SOUND";
  193. 1930  FOR J=1 TO 100:NEXT J
  194. 1940  NEXT I
  195. 1950  PRINT "<0xB5!>"
  196. 1960  FOR I=48 TO 29 STEP -1
  197. 1970  LOCATE 7,I
  198. 1980  PRINT "THEN"
  199. 1990  FOR J=1 TO 100:NEXT J
  200. 2000  NEXT I
  201. 2010  LOCATE 16,1
  202. 2020  PRINT "        a: A ray may come to two rocks situated such that it cannot pass                   between them or veer away because it would pass next to one of                  them.";
  203. 2030  PRINT                 "  In such a case the ray must backtrack to its source (#04)."
  204. 2040  PRINT "        b: A ray may not be able to enter onto the board because it would be               passing next to a rock(#23,#21,#19)."
  205. 2050  PRINT :PRINT "     NOTE: A `HIT!' always takes precedence over a `Reflection!' or a           deflection in such cases where more than one have their rules satisfied."
  206. 2060  B$=INKEY$:IF B$<>" " AND B$<>"x" AND B$<>"X" THEN 2060
  207. 2070  IF B$<>" " THEN 2290
  208. 2080  GOSUB 15030:GOSUB 15080
  209. 2090  LOCATE 15,1
  210. 2100  PRINT "     You may use the screen above while playing the game to display rocks in    any location, without it being `fixed', and you may change their positions on"
  211. 2110  PRINT "the screen.  This does NOT affect the actual solution.  You can use the `Trace' option to show you the way a ray would travel if the rocks were placed as they  are on the screen."
  212. 2120  PRINT "     When you are satisfied that the rocks as you have them displayed on the    screen are correct, you may enter the screen as a proposed solution and the     computer will tell you whether the display matches the hidden rocks'"
  213. 2130  PRINT "positions."
  214. 2140  B$=INKEY$:IF B$<>" " AND B$<>"x" AND B$<>"X" THEN 2140
  215. 2150  IF B$<>" " THEN 2290
  216. 2160  GOSUB 15030
  217. 2170  LOCATE 15,1
  218. 2180  PRINT "     Your scoring potential increases as you ask for larger numbers of rocks,   but the chances of unsolvable combinations also increases.  5 is the            recommended number."
  219. 2190  PRINT "     Your score decreases as you ask for more clues or give an incorrect        guess of the solution.  A score of 100 or more is very good."
  220. 2200  B$=INKEY$:IF B$<>" " AND B$<>"x" AND B$<>"X" THEN 2200
  221. 2210  IF B$<>" " THEN 2290
  222. 2220  GOSUB 15030
  223. 2230  LOCATE 15,1
  224. 2240  PRINT "     After you have gained some experience in playing the game, you may want    to try setting up some of your own layouts.  These can be saved for later"
  225. 2250  PRINT "solution, or entered immediately in place of the computer's setup, for          solution by a second player.  You do this by entering zero when the computer    asks you how many rocks you want hidden."
  226. 2260  PRINT :PRINT TAB(30) "GOOD HUNTING!"
  227. 2270  B$=INKEY$:IF B$<>" " AND B$<>"x" AND B$<>"X" THEN 2270
  228. 2280  IF B$<>" " THEN 2290
  229. 2290  LOCATE 25,1
  230. 2300  PRINT "                                                                 ";
  231. 2310  LOCATE 1,30
  232. 2320  PRINT "                                      "
  233. 2330  FOR I=4 TO 11
  234. 2340  FOR J=30 TO 51 STEP 3
  235. 2350  LOCATE I,J-1
  236. 2360  IF S(I-3,J/3-9)=-1 THEN PRINT "(";CHR$(2);")" ELSE PRINT "   "
  237. 2370  NEXT J
  238. 2380  NEXT I
  239. 2390  GOSUB 15030
  240. 2400  RESTORE
  241. 2410  RETURN
  242. 2420  GOSUB 15030
  243. 2430  LOCATE 15,1
  244. 2440  PRINT TAB(20) "Putting a rock on the screen"
  245. 2450  PRINT :PRINT
  246. 2460  PRINT TAB(10) "Use the directional keys at right to move the marker ";
  247. 2470  COLOR 15,0
  248. 2480  PRINT CHR$(2)
  249. 2490  COLOR 7,0
  250. 2500  PRINT TAB(10) "to the position where you want a rock placed, then press `Enter'."
  251. 2510  COLOR 15,0
  252. 2520  LOCATE 4,30
  253. 2530  PRINT CHR$(2)
  254. 2540  LOCATE 4,30
  255. 2550  ON KEY(11) GOSUB 2730
  256. 2560  ON KEY(14) GOSUB 2830
  257. 2570  ON KEY(13) GOSUB 2930
  258. 2580  ON KEY(12) GOSUB 3030
  259. 2590  KEY(11) ON
  260. 2600  KEY(12) ON
  261. 2610  KEY(13) ON
  262. 2620  KEY(14) ON
  263. 2630  MOVE$=INKEY$:IF MOVE$<>CHR$(13) THEN 2630
  264. 2640  LOCATE CSRLIN,POS(0)-1
  265. 2645  IF S(CSRLIN-3,(POS(0)-26)/3)=-1 THEN PREV=1 ELSE PREV=0
  266. 2650  S(CSRLIN-3,(POS(0)-26)/3)=-1
  267. 2660  COLOR 7,0
  268. 2670  PRINT CHR$(40);CHR$(2);CHR$(41)
  269. 2671  IF SCREEN(8,1)=68 AND PREV=0 THEN LOCATE 8,1:PRINT "Displayed: None"
  270. 2672  PREV=0
  271. 2680  KEY(11) OFF
  272. 2690  KEY(12) OFF
  273. 2700  KEY(13) OFF
  274. 2710  KEY(14) OFF
  275. 2720  RETURN
  276. 2730  IF CSRLIN=4 THEN RETURN
  277. 2740  IF S(CSRLIN-3,(POS(0)-27)/3)=0 THEN 2750 ELSE 2760
  278. 2750  PRINT " ";:GOTO 2790
  279. 2760  COLOR 7,0
  280. 2770  PRINT CHR$(2);
  281. 2780  COLOR 15,0
  282. 2790  LOCATE CSRLIN-1,POS(0)-1
  283. 2800  PRINT CHR$(2);
  284. 2810  LOCATE CSRLIN,POS(0)-1
  285. 2820  RETURN
  286. 2830  IF CSRLIN=11 THEN RETURN
  287. 2840  IF S(CSRLIN-3,(POS(0)-27)/3)=0 THEN 2850 ELSE 2860
  288. 2850  PRINT " ";:GOTO 2890
  289. 2860  COLOR 7,0
  290. 2870  PRINT CHR$(2);
  291. 2880  COLOR 15,0
  292. 2890  LOCATE CSRLIN+1,POS(0)-1
  293. 2900  PRINT CHR$(2);
  294. 2910  LOCATE CSRLIN,POS(0)-1
  295. 2920  RETURN
  296. 2930  IF POS(0)=51 THEN RETURN
  297. 2940  IF S(CSRLIN-3,(POS(0)-27)/3)=0 THEN 2950 ELSE 2960
  298. 2950  PRINT " ";:GOTO 2990
  299. 2960  COLOR 7,0
  300. 2970  PRINT CHR$(2);
  301. 2980  COLOR 15,0
  302. 2990  LOCATE CSRLIN,POS(0)+2
  303. 3000  PRINT CHR$(2);
  304. 3010  LOCATE CSRLIN,POS(0)-1
  305. 3020  RETURN
  306. 3030  IF POS(0)=30 THEN RETURN
  307. 3040  IF S(CSRLIN-3,(POS(0)-27)/3)=0 THEN 3050 ELSE 3060
  308. 3050  PRINT " ";:GOTO 3090
  309. 3060  COLOR 7,0
  310. 3070  PRINT CHR$(2);
  311. 3080  COLOR 15,0
  312. 3090  LOCATE CSRLIN,POS(0)-4
  313. 3100  PRINT CHR$(2);
  314. 3110  LOCATE CSRLIN,POS(0)-1
  315. 3120  RETURN
  316. 3130  GOSUB 15030
  317. 3140  LOCATE 15,1
  318. 3150  PRINT TAB(20) "Removing a rock from the screen"
  319. 3160  PRINT :PRINT
  320. 3170  PRINT TAB(10) "Use the directional keys at right to move the marker ";
  321. 3180  COLOR 15,0
  322. 3190  PRINT CHR$(2)
  323. 3200  COLOR 7,0
  324. 3210  PRINT TAB(10) "to the position from where you want a rock removed,"
  325. 3220  PRINT TAB(10) "then press `Enter'."
  326. 3230  COLOR 15,0
  327. 3240  LOCATE 4,30
  328. 3250  PRINT CHR$(2)
  329. 3260  LOCATE 4,30
  330. 3270  ON KEY(11) GOSUB 2730
  331. 3280  ON KEY(14) GOSUB 2830
  332. 3290  ON KEY(13) GOSUB 2930
  333. 3300  ON KEY(12) GOSUB 3030
  334. 3310  KEY(11) ON
  335. 3320  KEY(12) ON
  336. 3330  KEY(13) ON
  337. 3340  KEY(14) ON
  338. 3350  MOVE$=INKEY$:IF MOVE$<>CHR$(13) THEN 3350
  339. 3360  LOCATE CSRLIN,POS(0)-1
  340. 3365  IF S(CSRLIN-3,(POS(0)-26)/3)=0 THEN PREV=1 ELSE PREV=0
  341. 3370  S(CSRLIN-3,(POS(0)-26)/3)=0
  342. 3380  COLOR 7,0
  343. 3390  PRINT CHR$(0);CHR$(0);CHR$(0)
  344. 3391  IF SCREEN(8,1)=68 AND PREV=0 THEN LOCATE 8,1:PRINT "Displayed: None"
  345. 3392  PREV=0
  346. 3400  KEY(11) OFF
  347. 3410  KEY(12) OFF
  348. 3420  KEY(13) OFF
  349. 3430  KEY(14) OFF
  350. 3440  RETURN
  351. 3450  GOSUB 15030
  352. 3460  LOCATE 15,20
  353. 3470  PRINT "Trace a path on the screen:"
  354. 3480  PRINT :PRINT
  355. 3490  PRINT "What number would you like to see traced (01-32)?";
  356. 3500  B$=INKEY$:IF B$="" THEN 3500
  357. 3510  IF ASC(B$)<48 OR ASC(B$)>51 THEN 3500
  358. 3520  C$=B$
  359. 3530  PRINT C$;
  360. 3540  B$=INKEY$:IF B$="" THEN 3540
  361. 3550  IF ASC(B$)<48 OR ASC(B$)>57 THEN 3540
  362. 3560  IF C$="3" AND ASC(B$)>50 THEN 3540
  363. 3570  C$=C$+B$
  364. 3580  P=VAL(C$)
  365. 3590  PRINT B$
  366. 3600  'ENTER ROUTINE:
  367. 3610  'ENTER RIGHT:
  368. 3620  IF P>8 THEN 3700
  369. 3630  IF S(P,1)<>-1 THEN 3660
  370. 3640  PRINT :PRINT TAB(20) "HIT! Ray can't enter board."
  371. 3650  GOTO 5240
  372. 3660  IF S(P-1,1)<>-1 AND S(P+1,1)<>-1 THEN LOCATE P+3,27:GOTO 3920
  373. 3670  PRINT :PRINT TAB(20) "Reflection! Ray can't enter board."
  374. 3680  GOTO 5240
  375. 3690  'ENTER UP
  376. 3700  IF P>16 THEN 3780
  377. 3710  IF S(8,P-8)<>-1 THEN 3740
  378. 3720  PRINT:PRINT TAB(20) "HIT! Ray can't enter board."
  379. 3730  GOTO 5240
  380. 3740  IF S(8,P-7)<>-1 AND S(8,P-9)<>-1 THEN LOCATE 12,P*3+3:GOTO 4250
  381. 3750  PRINT :PRINT TAB(20) "Reflection! Ray can't enter board."
  382. 3760  GOTO 5240
  383. 3770  'ENTER LEFT
  384. 3780  IF P>24 THEN 3860
  385. 3790  IF S(25-P,8)<>-1 THEN 3820
  386. 3800  PRINT :PRINT TAB(20) "HIT! Ray can't enter board."
  387. 3810  GOTO 5240
  388. 3820  IF S(24-P,8)<>-1 AND S(26-P,8)<>-1 THEN LOCATE 28-P,54:GOTO 4580
  389. 3830  PRINT :PRINT TAB(20) "Reflection! Ray can't enter board."
  390. 3840  GOTO 5240
  391. 3850  'ENTER DOWN
  392. 3860  IF S(1,33-P)<>-1 THEN 3890
  393. 3870  PRINT :PRINT TAB(20) "HIT! Ray can't enter board."
  394. 3880  GOTO 5240
  395. 3890  IF S(1,32-P)<>-1 AND S(1,34-P)<>-1 THEN LOCATE 3,126-P*3:GOTO 4910
  396. 3900  PRINT :PRINT TAB(20) "Reflection! Ray can't enter board."
  397. 3910  GOTO 5240
  398. 3920  'HEADING RIGHT
  399. 3930  LOCATE ,POS(0)+2
  400. 3940  IF SCREEN(CSRLIN,POS(0)+1)>178 THEN 4190
  401. 3950  IF POS(0)=53 THEN 4130
  402. 3960  IF SCREEN(CSRLIN,POS(0)+4)<>2 THEN 4010
  403. 3970  PRINT "SOUNDSOUND*"
  404. 3980  LOCATE 20,20
  405. 3990  PRINT "HIT!"
  406. 4000  GOTO 5240
  407. 4010  IF SCREEN(CSRLIN+1,POS(0)+4)<>2 OR SCREEN(CSRLIN-1,POS(0)+4)<>2 THEN 4080
  408. 4020  PRINT "THENTHEN<0xB5!>";
  409. 4030  ROW=CSRLIN:COL=POS(0)-2
  410. 4040  LOCATE 20,20
  411. 4050  PRINT "Reflection!"
  412. 4060  LOCATE ROW,COL
  413. 4070  GOTO 4580
  414. 4080  IF SCREEN(CSRLIN+1,POS(0)+4)=2 THEN PRINT "SOUND' ";:LOCATE ,POS(0)-2:GOTO 4250
  415. 4090  IF SCREEN(CSRLIN-1,POS(0)+4)=2 THEN PRINT "SOUNDCOLOR ";:LOCATE ,POS(0)-2:GOTO 4910
  416. 4100  PRINT "SOUNDSOUNDSOUND";
  417. 4110  LOCATE ,POS(0)-2
  418. 4120  GOTO 3920
  419. 4130  ROW=CSRLIN
  420. 4140  LOCATE 20,20
  421. 4150  IF SCREEN(20,20)>32 THEN 5240
  422. 4160  PRINT "Ray ends at position #";
  423. 4170  PRINT CHR$(SCREEN(ROW,54));CHR$(SCREEN(ROW,55))
  424. 4180  GOTO 5240
  425. 4190  IF SCREEN(CSRLIN,POS(0)+1)=196 THEN PRINT "THENTHENTHEN";:LOCATE ,POS(0)-2:GOTO 3920
  426. 4200  IF SCREEN(CSRLIN,POS(0)+1)=179 THEN PRINT "SOUNDBEEPSOUND";:LOCATE ,POS(0)-2:GOTO 3920
  427. 4210  IF SCREEN(CSRLIN,POS(0)+1)=215 THEN PRINT "THENTAB(THEN";:LOCATE ,POS(0)-2:GOTO 3920
  428. 4220  IF SCREEN(CSRLIN,POS(0)+1)=197 THEN PRINT "THENINSTRTHEN";:LOCATE ,POS(0)-2:GOTO 3920
  429. 4230  IF SCREEN(CSRLIN,POS(0)+1)=217 THEN PRINT "THENLOAD ";:LOCATE ,POS(0)-2:GOTO 4250
  430. 4240  IF SCREEN(CSRLIN,POS(0)+1)=191 THEN PRINT "THENCLOSE ";:LOCATE ,POS(0)-2:GOTO 4910
  431. 4250  'HEADING UP
  432. 4260  LOCATE CSRLIN-1,POS(0)-1
  433. 4270  IF SCREEN(CSRLIN,POS(0)+1)>178 THEN 4520
  434. 4280  IF CSRLIN=3 THEN 4460
  435. 4290  IF SCREEN(CSRLIN-1,POS(0)+1)<>2 THEN 4340
  436. 4300  PRINT " CALL "
  437. 4310  LOCATE 20,20
  438. 4320  PRINT "HIT!"
  439. 4330  GOTO 5240
  440. 4340  IF SCREEN(CSRLIN-1,POS(0)+4)<>2 OR SCREEN(CSRLIN-1,POS(0)-2)<>2 THEN 4410
  441. 4350  PRINT "SOUNDSPC(SOUND";
  442. 4360  ROW=CSRLIN:COL=POS(0)-2
  443. 4370  LOCATE 20,20
  444. 4380  PRINT "Reflection!"
  445. 4390  LOCATE ROW,COL
  446. 4400  GOTO 4910
  447. 4410  IF SCREEN(CSRLIN-1,POS(0)+4)=2 THEN PRINT "SOUNDCOLOR ";:LOCATE ,POS(0)-2:GOTO 4580
  448. 4420  IF SCREEN(CSRLIN-1,POS(0)-2)=2 THEN PRINT " VARPTRSOUND";:LOCATE ,POS(0)-2:GOTO 3920
  449. 4430  PRINT " CALL ";
  450. 4440  LOCATE ,POS(0)-2
  451. 4450  GOTO 4250
  452. 4460  COL=POS(0)
  453. 4470  LOCATE 20,20
  454. 4480  IF SCREEN(20,20)>32 THEN 5240
  455. 4490  PRINT "Ray ends at position #";
  456. 4500  PRINT CHR$(SCREEN(3,COL));CHR$(SCREEN(3,COL+1))
  457. 4510  GOTO 5240
  458. 4520  IF SCREEN(CSRLIN,POS(0)+1)=179 THEN PRINT " OPEN ";:LOCATE ,POS(0)-2:GOTO 4250
  459. 4530  IF SCREEN(CSRLIN,POS(0)+1)=196 THEN PRINT "SOUNDBEEPSOUND";:LOCATE ,POS(0)-2:GOTO 4250
  460. 4540  IF SCREEN(CSRLIN,POS(0)+1)=216 THEN PRINT "THENTAB(THEN";:LOCATE ,POS(0)-2:GOTO 4250
  461. 4550  IF SCREEN(CSRLIN,POS(0)+1)=197 THEN PRINT "SOUNDUSINGSOUND";:LOCATE ,POS(0)-2:GOTO 4250
  462. 4560  IF SCREEN(CSRLIN,POS(0)+1)=191 THEN PRINT "THENCLOSE ";:LOCATE ,POS(0)-2:GOTO 4580
  463. 4570  IF SCREEN(CSRLIN,POS(0)+1)=218 THEN PRINT " KEYTHEN";:LOCATE ,POS(0)-2:GOTO 3920
  464. 4580  'HEADING LEFT
  465. 4590  LOCATE ,POS(0)-4
  466. 4600  IF SCREEN(CSRLIN,POS(0)+1)>178 THEN 4850
  467. 4610  IF POS(0)=26 THEN 4790
  468. 4620  IF SCREEN(CSRLIN,POS(0)-2)<>2 THEN 4670
  469. 4630  PRINT "*SOUNDSOUND"
  470. 4640  LOCATE 20,20
  471. 4650  PRINT "HIT!"
  472. 4660  GOTO 5240
  473. 4670  IF SCREEN(CSRLIN+1,POS(0)-2)<>2 OR SCREEN(CSRLIN-1,POS(0)-2)<>2 THEN 4740
  474. 4680  PRINT "PSETTHENTHEN";
  475. 4690  ROW=CSRLIN:COL=POS(0)-2
  476. 4700  LOCATE 20,20
  477. 4710  PRINT "Reflection!"
  478. 4720  LOCATE ROW,COL
  479. 4730  GOTO 3920
  480. 4740  IF SCREEN(CSRLIN+1,POS(0)-2)=2 THEN PRINT " CLSSOUND";:LOCATE ,POS(0)-2:GOTO 4250
  481. 4750  IF SCREEN(CSRLIN-1,POS(0)-2)=2 THEN PRINT " VARPTRSOUND";:LOCATE ,POS(0)-2:GOTO 4910
  482. 4760  PRINT "SOUNDSOUNDSOUND";
  483. 4770  LOCATE ,POS(0)-2
  484. 4780  GOTO 4580
  485. 4790  ROW=CSRLIN
  486. 4800  LOCATE 20,20
  487. 4810  IF SCREEN(20,20)>32 THEN 5240
  488. 4820  PRINT "Ray ends at position #";
  489. 4830  PRINT CHR$(SCREEN(ROW,26));CHR$(SCREEN(ROW,27))
  490. 4840  GOTO 5240
  491. 4850  IF SCREEN(CSRLIN,POS(0)+1)=196 THEN PRINT "THENTHENTHEN";:LOCATE ,POS(0)-2:GOTO 4580  
  492. 4860  IF SCREEN(CSRLIN,POS(0)+1)=179 THEN PRINT "SOUNDBEEPSOUND";:LOCATE ,POS(0)-2:GOTO 4580
  493. 4870  IF SCREEN(CSRLIN,POS(0)+1)=215 THEN PRINT "THENTAB(THEN";:LOCATE ,POS(0)-2:GOTO 4580
  494. 4880  IF SCREEN(CSRLIN,POS(0)+1)=197 THEN PRINT "THENINSTRTHEN";:LOCATE ,POS(0)-2:GOTO 4580
  495. 4890  IF SCREEN(CSRLIN,POS(0)+1)=192 THEN PRINT " SCREENTHEN";:LOCATE ,POS(0)-2:GOTO 4250
  496. 4900  IF SCREEN(CSRLIN,POS(0)+1)=218 THEN PRINT " KEYTHEN";:LOCATE ,POS(0)-2:GOTO 4910
  497. 4910  'HEADING DOWN
  498. 4920  LOCATE CSRLIN+1,POS(0)-1
  499. 4930  IF SCREEN(CSRLIN,POS(0)+1)>178 THEN 5180
  500. 4940  IF CSRLIN=12 THEN 5120
  501. 4950  IF SCREEN(CSRLIN+1,POS(0)+1)<>2 THEN 5000
  502. 4960  PRINT " CALL "
  503. 4970  LOCATE 20,20
  504. 4980  PRINT "HIT!"
  505. 4990  GOTO 5240
  506. 5000  IF SCREEN(CSRLIN+1,POS(0)+4)<>2 OR SCREEN(CSRLIN+1,POS(0)-2)<>2 THEN 5070
  507. 5010  PRINT "SOUNDUSRSOUND";
  508. 5020  ROW=CSRLIN:COL=POS(0)-2
  509. 5030  LOCATE 20,20
  510. 5040  PRINT "Reflection!"
  511. 5050  LOCATE ROW,COL
  512. 5060  GOTO 4250
  513. 5070  IF SCREEN(CSRLIN+1,POS(0)+4)=2 THEN PRINT "SOUND' ";:LOCATE ,POS(0)-2:GOTO 4580
  514. 5080  IF SCREEN(CSRLIN+1,POS(0)-2)=2 THEN PRINT " CLSSOUND";:LOCATE ,POS(0)-2:GOTO 3920
  515. 5090  PRINT " CALL ";
  516. 5100  LOCATE ,POS(0)-2
  517. 5110  GOTO 4910
  518. 5120  COL=POS(0)
  519. 5130  LOCATE 20,20
  520. 5140  IF SCREEN(20,20)>32 THEN 5240
  521. 5150  PRINT "Ray ends at position #";
  522. 5160  PRINT CHR$(SCREEN(12,COL));CHR$(SCREEN(12,COL+1))
  523. 5170  GOTO 5240
  524. 5180  IF SCREEN(CSRLIN,POS(0)+1)=179 THEN PRINT " OPEN ";:LOCATE ,POS(0)-2:GOTO 4910
  525. 5190  IF SCREEN(CSRLIN,POS(0)+1)=196 THEN PRINT "SOUNDBEEPSOUND";:LOCATE ,POS(0)-2:GOTO 4910
  526. 5200  IF SCREEN(CSRLIN,POS(0)+1)=216 THEN PRINT "THENTAB(THEN";:LOCATE ,POS(0)-2:GOTO 4910
  527. 5210  IF SCREEN(CSRLIN,POS(0)+1)=197 THEN PRINT "SOUNDUSINGSOUND";:LOCATE ,POS(0)-2:GOTO 4910
  528. 5220  IF SCREEN(CSRLIN,POS(0)+1)=217 THEN PRINT "THENLOAD ";:LOCATE ,POS(0)-2:GOTO 4580
  529. 5230  IF SCREEN(CSRLIN,POS(0)+1)=192 THEN PRINT " SCREENTHEN";:LOCATE ,POS(0)-2:GOTO 3920
  530. 5240  LOCATE 22,20
  531. 5250  PRINT "Do you want to trace another path (Y/N)?"
  532. 5260  B$=INKEY$:IF B$="" THEN 5260
  533. 5270  IF B$="y" OR B$="Y" THEN 5310
  534. 5280  IF B$<>"n" AND B$<>"N" THEN 5260
  535. 5290  GOSUB 15080
  536. 5300  RETURN
  537. 5310  GOSUB 15080
  538. 5320  GOSUB 15030
  539. 5330  GOTO 3450
  540. 5340  GOSUB 15030
  541. 5350  LOCATE 15,20
  542. 5360  PRINT "Ask for a clue:"
  543. 5370  PRINT :PRINT
  544. 5380  PRINT "What number would you like to ask about (01-32)?";
  545. 5390  B$=INKEY$:IF B$="" THEN 5390
  546. 5400  IF ASC(B$)<48 OR ASC(B$)>51 THEN 5390
  547. 5410  C$=B$
  548. 5420  PRINT C$;
  549. 5430  B$=INKEY$:IF B$="" THEN 5430
  550. 5440  IF ASC(B$)<48 OR ASC(B$)>57 THEN 5430
  551. 5450  IF C$="3" AND ASC(B$)>50 THEN 5430
  552. 5460  C$=C$+B$
  553. 5470  P=VAL(C$)
  554. 5480  PRINT B$
  555. 5490  'ENTER ROUTINE:
  556. 5500  'ENTER RIGHT:
  557. 5510  IF P>8 THEN 5620
  558. 5520  IF B(P,1)<>-1 THEN 5570
  559. 5530  IF CRE=2 THEN COLOR 0,0
  560. 5540  PRINT :PRINT TAB(20) "HIT!"
  561. 5550  LOCATE P+3,24:COLOR 15,0:PRINT "H":COLOR 7,0
  562. 5560  GOTO 7230
  563. 5570  IF B(P-1,1)<>-1 AND B(P+1,1)<>-1 THEN LOCATE P+3,27:GOTO 5950
  564. 5580  IF CRE=2 THEN COLOR 0,0
  565. 5590  PRINT :PRINT TAB(20) "Reflection!"
  566. 5600  LOCATE P+3,24:COLOR 15,0:PRINT "R":COLOR 7,0
  567. 5610  GOTO 7230
  568. 5620  IF P>16 THEN 5740
  569. 5630  IF B(8,P-8)<>-1 THEN 5680
  570. 5640  IF CRE=2 THEN COLOR 0,0
  571. 5650  PRINT:PRINT TAB(20) "HIT!"
  572. 5660  LOCATE 13,P*3+3:COLOR 15,0:PRINT "H":COLOR 7,0
  573. 5670  GOTO 7230
  574. 5680  IF B(8,P-7)<>-1 AND B(8,P-9)<>-1 THEN LOCATE 12,P*3+3:GOTO 6270
  575. 5690  IF CRE=2 THEN COLOR 0,0
  576. 5700  PRINT :PRINT TAB(20) "Reflection!"
  577. 5710  LOCATE 13,P*3+3:COLOR 15,0:PRINT "R":COLOR 7,0
  578. 5720  GOTO 7230
  579. 5730  'ENTER LEFT
  580. 5740  IF P>24 THEN 5860
  581. 5750  IF B(25-P,8)<>-1 THEN 5800
  582. 5760  IF CRE=2 THEN COLOR 0,0
  583. 5770  PRINT :PRINT TAB(20) "HIT!"
  584. 5780  LOCATE 28-P,57:COLOR 15,0:PRINT "H":COLOR 7,0
  585. 5790  GOTO 7230
  586. 5800  IF B(24-P,8)<>-1 AND B(26-P,8)<>-1 THEN LOCATE 28-P,54:GOTO 6590
  587. 5810  IF CRE=2 THEN COLOR 0,0
  588. 5820  PRINT :PRINT TAB(20) "Reflection!"
  589. 5830  LOCATE 28-P,57:COLOR 15,0:PRINT "R":COLOR 7,0
  590. 5840  GOTO 7230
  591. 5850  'ENTER DOWN
  592. 5860  IF B(1,33-P)<>-1 THEN 5910
  593. 5870  IF CRE=2 THEN COLOR 0,0
  594. 5880  PRINT :PRINT TAB(20) "HIT!"
  595. 5890  LOCATE 2,126-P*3:COLOR 15,0:PRINT "H":COLOR 7,0
  596. 5900  GOTO 7230
  597. 5910  IF B(1,32-P)<>-1 AND B(1,34-P)<>-1 THEN LOCATE 3,126-P*3:GOTO 6910
  598. 5920  IF CRE=2 THEN COLOR 0,0
  599. 5930  PRINT :PRINT TAB(20) "Reflection!"
  600. 5940  LOCATE 2,126-P*3:COLOR 15,0:PRINT "R":COLOR 7,0:GOTO 7230
  601. 5950  'HEADING RIGHT
  602. 5960  LOCATE ,POS(0)+2
  603. 5970  IF POS(0)=53 THEN 6160
  604. 5980  IF B(CSRLIN-3,CINT(POS(0)/3)-8)<>-1 THEN 6040
  605. 5990  LOCATE 20,20
  606. 6000  IF CRE=2 THEN COLOR 0,0
  607. 6010  PRINT "HIT!"
  608. 6020  GOSUB 15160
  609. 6030  GOTO 7230
  610. 6040  IF B(CSRLIN-2,CINT(POS(0)/3)-8)<>-1 OR B(CSRLIN-4,CINT(POS(0)/3)-8)<>-1         THEN 6120
  611. 6050  ROW=CSRLIN:COL=POS(0)+1
  612. 6060  LOCATE 20,20
  613. 6070  IF CRE=2 THEN COLOR 0,0
  614. 6080  PRINT "Reflection!"
  615. 6090  GOSUB 15160
  616. 6100  LOCATE ROW,COL
  617. 6110  GOTO 7230
  618. 6120  IF B(CSRLIN-2,CINT(POS(0)/3)-8)=-1 THEN LOCATE ,POS(0)+1:GOTO 6270
  619. 6130  IF B(CSRLIN-4,CINT(POS(0)/3)-8)=-1 THEN LOCATE ,POS(0)+1:GOTO 6910
  620. 6140  LOCATE ,POS(0)+1
  621. 6150  GOTO 5950
  622. 6160  ROW=CSRLIN
  623. 6170  LOCATE 20,20
  624. 6180  IF SCREEN(20,20)>32 THEN 7230
  625. 6190  IF CRE=2 THEN COLOR 0,0
  626. 6200  PRINT "Ray ends at position #";
  627. 6210  N$=CHR$(SCREEN(ROW,54))+CHR$(SCREEN(ROW,55))
  628. 6220  IF CRE<1 THEN PRINT N$
  629. 6230  COLOR 7,0
  630. 6240  LOCATE ROW,57
  631. 6250  GOSUB 15160
  632. 6260  GOTO 7230
  633. 6270  'HEADING UP
  634. 6280  LOCATE CSRLIN-1,POS(0)-1
  635. 6290  IF CSRLIN=3 THEN 6480
  636. 6300  IF B(CSRLIN-4,(POS(0)+1)/3-9)<>-1 THEN 6360
  637. 6310  LOCATE 20,20
  638. 6320  IF CRE=2 THEN COLOR 0,0
  639. 6330  PRINT "HIT!"
  640. 6340  GOSUB 15160
  641. 6350  GOTO 7230
  642. 6360  IF B(CSRLIN-4,(POS(0)+4)/3-9)<>-1 OR B(CSRLIN-4,(POS(0)-2)/3-9)<>-1 THEN 6440
  643. 6370  ROW=CSRLIN:COL=POS(0)-2
  644. 6380  LOCATE 20,20
  645. 6390  IF CRE=2 THEN COLOR 0,0
  646. 6400  PRINT "Reflection!"
  647. 6410  GOSUB 15160
  648. 6420  LOCATE ROW,COL
  649. 6430  GOTO 7230
  650. 6440  IF B(CSRLIN-4,(POS(0)+4)/3-9)=-1 THEN LOCATE ,POS(0)+1:GOTO 6590
  651. 6450  IF B(CSRLIN-4,(POS(0)-2)/3-9)=-1 THEN LOCATE ,POS(0)+1:GOTO 5950
  652. 6460  LOCATE ,POS(0)+1
  653. 6470  GOTO 6270
  654. 6480  COL=POS(0)
  655. 6490  LOCATE 20,20
  656. 6500  IF SCREEN(20,20)>32 THEN 7230
  657. 6510  IF CRE=2 THEN COLOR 0,0
  658. 6520  PRINT "Ray ends at position #";
  659. 6530  N$=CHR$(SCREEN(3,COL))+CHR$(SCREEN(3,COL+1))
  660. 6540  IF CRE<1 THEN PRINT N$
  661. 6550  COLOR 7,0
  662. 6560  LOCATE 2,COL+1
  663. 6570  GOSUB 15160
  664. 6580  GOTO 7230
  665. 6590  'HEADING LEFT
  666. 6600  LOCATE ,POS(0)-4
  667. 6610  IF POS(0)=26 THEN 6800
  668. 6620  IF B(CSRLIN-3,CINT(POS(0)/3)-10)<>-1 THEN 6680
  669. 6630  LOCATE 20,20
  670. 6640  IF CRE=2 THEN COLOR 0,0
  671. 6650  PRINT "HIT!"
  672. 6660  GOSUB 15160
  673. 6670  GOTO 7230
  674. 6680  IF B(CSRLIN-2,CINT(POS(0)/3)-10)<>-1 OR B(CSRLIN-4,CINT(POS(0)/3)-10)<>-1         THEN 6760
  675. 6690  ROW=CSRLIN:COL=POS(0)+1
  676. 6700  LOCATE 20,20
  677. 6710  IF CRE=2 THEN COLOR 0,0
  678. 6720  PRINT "Reflection!"
  679. 6730  GOSUB 15160
  680. 6740  LOCATE ROW,COL
  681. 6750  GOTO 7230
  682. 6760  IF B(CSRLIN-2,CINT(POS(0)/3)-10)=-1 THEN LOCATE ,POS(0)+1:GOTO 6270
  683. 6770  IF B(CSRLIN-4,CINT(POS(0)/3)-10)=-1 THEN LOCATE ,POS(0)+1:GOTO 6910
  684. 6780  LOCATE ,POS(0)+1
  685. 6790  GOTO 6590
  686. 6800  ROW=CSRLIN
  687. 6810  LOCATE 20,20
  688. 6820  IF SCREEN(20,20)>32 THEN 7230
  689. 6830  IF CRE=2 THEN COLOR 0,0
  690. 6840  PRINT "Ray ends at position #";
  691. 6850  N$=CHR$(SCREEN(ROW,26))+CHR$(SCREEN(ROW,27))
  692. 6860  IF CRE<1 THEN PRINT N$
  693. 6870  COLOR 7,0
  694. 6880  LOCATE ROW,24
  695. 6890  GOSUB 15160
  696. 6900  GOTO 7230
  697. 6910  'HEADING DOWN
  698. 6920  LOCATE CSRLIN+1,POS(0)-1
  699. 6930  IF CSRLIN=12 THEN 7120
  700. 6940  IF B(CSRLIN-2,(POS(0)+1)/3-9)<>-1 THEN 7000
  701. 6950  LOCATE 20,20
  702. 6960  IF CRE=2 THEN COLOR 0,0
  703. 6970  PRINT "HIT!"
  704. 6980  GOSUB 15160
  705. 6990  GOTO 7230
  706. 7000  IF B(CSRLIN-2,(POS(0)+4)/3-9)<>-1 OR B(CSRLIN-2,(POS(0)-2)/3-9)<>-1 THEN 7080
  707. 7010  ROW=CSRLIN:COL=POS(0)-2
  708. 7020  LOCATE 20,20
  709. 7030  IF CRE=2 THEN COLOR 0,0
  710. 7040  PRINT "Reflection!"
  711. 7050  GOSUB 15160
  712. 7060  LOCATE ROW,COL
  713. 7070  GOTO 7230
  714. 7080  IF B(CSRLIN-2,(POS(0)+4)/3-9)=-1 THEN LOCATE ,POS(0)+1:GOTO 6590
  715. 7090  IF B(CSRLIN-2,(POS(0)-2)/3-9)=-1 THEN LOCATE ,POS(0)+1:GOTO 5950
  716. 7100  LOCATE ,POS(0)+1
  717. 7110  GOTO 6910
  718. 7120  COL=POS(0)
  719. 7130  LOCATE 20,20
  720. 7140  IF SCREEN(20,20)>32 THEN 7230
  721. 7150  IF CRE=2 THEN COLOR 0,0
  722. 7160  PRINT "Ray ends at position #";
  723. 7170  N$=CHR$(SCREEN(12,COL))+CHR$(SCREEN(12,COL+1))
  724. 7180  IF CRE<1 THEN PRINT N$
  725. 7190  COLOR 7,0
  726. 7200  LOCATE 13,COL+1
  727. 7210  GOSUB 15160
  728. 7220  GOTO 7230
  729. 7230  IF CRE<1 THEN LOCATE 22,20 ELSE RETURN
  730. 7240  PRINT "Do you want another clue (Y/N)?"
  731. 7250  B$=INKEY$:IF B$="" THEN 7250
  732. 7260  IF B$="y" OR B$="Y" THEN 7290
  733. 7270  IF B$<>"n" AND B$<>"N" THEN 7250
  734. 7280  RETURN
  735. 7290  GOSUB 15030
  736. 7300  GOTO 5340
  737. 7310  'COMPARE SCREEN TO SOLUTION
  738. 7320  MISSB=0:MISSS=0
  739. 7330  GOSUB 15030
  740. 7340  LOCATE 15,20
  741. 7350  PRINT "Entering screen as your guess of the solution:":PRINT
  742. 7360  FOR I=1 TO 8
  743. 7370  FOR J=1 TO 8
  744. 7380  IF B(I,J)=S(I,J) THEN 7410
  745. 7390  IF B(I,J)=-1 THEN MISSB=MISSB+1
  746. 7400  IF S(I,J)=-1 THEN MISSS=MISSS+1
  747. 7410  NEXT J
  748. 7420  NEXT I
  749. 7430  IF MISSS>MISSB THEN PRINT TAB(20) "You have";MISSS-MISSB;"more rock(s) on the screen than there":PRINT TAB(20) "are in the solution.  Try again with the correct number.":GOTO 7660
  750. 7440  IF MISSB>MISSS THEN PRINT TAB(20) "You have";MISSB-MISSS;"fewer rock(s) on the screen than there":PRINT TAB(20) "are in the solution.  Try again with the correct number.":GOTO 7660
  751. 7450  IF MISSB>0 THEN PRINT TAB(20) "You have";MISSB;"rock(s) incorrectly placed.":GOTO 7660
  752. 7460  PRINT "Your solution is absolutely correct!"
  753. 7470  ROW=CSRLIN
  754. 7480  COL=POS(0)
  755. 7490  LOCATE 7,1
  756. 7500  PRINT TAB(21)
  757. 7510  LOCATE ROW,COL
  758. 7520  CLUES=32
  759. 7530  FOR I=4 TO 11
  760. 7540  IF SCREEN(I,24)<>0 AND SCREEN(I,24)<>32 THEN CLUES=CLUES-1
  761. 7550  IF SCREEN(I,57)<>0 AND SCREEN(I,57)<>32 THEN CLUES=CLUES-1
  762. 7560  NEXT I
  763. 7570  FOR I=30 TO 51 STEP 3
  764. 7580  IF SCREEN(13,I)<>0 AND SCREEN(13,I)<>32 THEN CLUES=CLUES-1
  765. 7590  IF SCREEN(2,I)<>0 AND SCREEN(2,I)<>32 THEN CLUES=CLUES-1
  766. 7600  NEXT I
  767. 7610  PRINT "Your score is";(CLUES-GUESS)*F
  768. 7620  PRINT "Press any key to continue."
  769. 7630  ERASE B:ERASE S
  770. 7640  B$=INKEY$:IF B$="" THEN 7640
  771. 7650  RETURN 460
  772. 7660  IF MISSS=MISSB THEN GUESS=GUESS+1
  773. 7670  PRINT :PRINT "Press any key to return to the menu."
  774. 7680  B$=INKEY$:IF B$="" THEN 7680 ELSE RETURN
  775. 7690  'SOLUTION
  776. 7700  GOSUB 15030
  777. 7710  LOCATE 15,20
  778. 7720  PRINT "Display solution:"
  779. 7730  LOCATE 7,1
  780. 7740  COLOR 15,0
  781. 7750  PRINT TAB(10) "SOLUTION   "
  782. 7760  PRINT TAB(10) "--------"
  783. 7770  FOR I=4 TO 11
  784. 7780  FOR J=30 TO 51 STEP 3
  785. 7790  LOCATE I,J-1
  786. 7800  IF B(I-3,J/3-9)=-1 THEN PRINT "(";CHR$(2);")" ELSE PRINT "   "
  787. 7810  NEXT J
  788. 7820  NEXT I
  789. 7830  COLOR 7,0
  790. 7840  LOCATE 17,20
  791. 7850  FOR I=1 TO 8
  792. 7860  FOR J=1 TO 8
  793. 7870  S(I,J)=B(I,J)
  794. 7880  NEXT J
  795. 7890  NEXT I
  796. 7900  PRINT "Do you want to trace any paths (Y/N)?"
  797. 7910  B$=INKEY$:IF B$="" THEN 7910
  798. 7920  IF B$<>"n" AND B$<>"N" AND B$<>"y" AND B$<>"Y" THEN 7910
  799. 7930  IF B$="Y" OR B$="y" THEN GOSUB 3450
  800. 7940  GOSUB 15030
  801. 7950  LOCATE 15,20
  802. 7960  PRINT :PRINT TAB(20) "Press any key to continue." TAB(80)
  803. 7970  ERASE S:ERASE B
  804. 7980  B$=INKEY$:IF B$="" THEN 7980
  805. 7990  RETURN 460
  806. 8000  CLS
  807. 8010  LOCATE 10,1,0
  808. 8020  PRINT TAB(10) "Please type the letter of the function you want:"
  809. 8030  PRINT :PRINT TAB(10) "A. Create a setup to be solved by someone else."
  810. 8040  PRINT TAB(10) "B. Load a previously saved setup for solution."
  811. 8050  B$=INKEY$:IF B$<>"a" AND B$<>"A" AND B$<>"b" AND B$<>"B" THEN 8050
  812. 8060  IF B$="b" OR B$="B" THEN 10620
  813. 8070  CRE=2
  814. 8080  GOSUB 540
  815. 8081  COLOR 7,0
  816. 8082  LOCATE 7,1
  817. 8083  PRINT "Record #"
  818. 8084  PRINT "Displayed: None"
  819. 8090  LOCATE 15,1,0
  820. 8100  CRE=2
  821. 8110  PRINT TAB(20) "A. Review instructions.                                     ";
  822. 8120  PRINT TAB(20) "B. Place a rock on the screen.                              ";
  823. 8130  PRINT TAB(20) "C. Remove a rock from the screen.                           ";
  824. 8140  PRINT TAB(20) "D. Trace a path on the screen.                              ";
  825. 8150  PRINT TAB(20) "E. Display all clues for the setup on the screen.           ";
  826. 8160  PRINT TAB(20) "F. Save/use the display on the screen as a solution.        ";
  827. 8170  PRINT TAB(20) "G. Call up/delete a previously saved solution.              ";
  828. 8180  PRINT TAB(20) "H. End create routine.                                      ";
  829. 8190  PRINT TAB(80) " "
  830. 8200  PRINT TAB(20) "Please type the letter of the function you want:";
  831. 8210  B$=INKEY$:IF B$="" THEN 8210
  832. 8220  IF ASC(B$)<65 OR (ASC(B$)>72 AND ASC(B$)<97) OR ASC(B$)>104 THEN 8210
  833. 8230  LOCATE CSRLIN,1:PRINT TAB(80)
  834. 8240  IF ASC(B$)<97 THEN 8270
  835. 8250  ON (ASC(B$)-96) GOSUB 1080,2420,3130,3450,8290,8630,12500,15000
  836. 8260  GOTO 8090
  837. 8270  ON (ASC(B$)-64) GOSUB 1080,2420,3130,3450,8290,8630,12500,15000
  838. 8280  GOTO 8090
  839. 8290  GOSUB 15030
  840. 8300  LOCATE 15,20
  841. 8310  PRINT "Display all clues:"
  842. 8320  PRINT :PRINT
  843. 8330  FOR ROWV=1 TO 8
  844. 8340  FOR COLV=1 TO 8
  845. 8350  B(ROWV,COLV)=S(ROWV,COLV)
  846. 8360  NEXT COLV
  847. 8370  NEXT ROWV
  848. 8380  FOR P=1 TO 32:
  849. 8390  LOCATE 20,20
  850. 8400  PRINT "  "
  851. 8410  GOSUB 5500
  852. 8420  NEXT P
  853. 8430  LOCATE 17,1
  854. 8440  PRINT TAB(20) "Do you want to trace any paths (Y/N)?"
  855. 8450  B$=INKEY$:IF B$="" THEN 8450
  856. 8460  IF B$<>"n" AND B$<>"N" AND B$<>"y" AND B$<>"Y" THEN 8450
  857. 8470  IF B$="Y" OR B$="y" THEN GOSUB 3450
  858. 8480  FOR I=4 TO 11
  859. 8490  LOCATE I,24
  860. 8500  PRINT " "
  861. 8510  LOCATE I,57
  862. 8520  PRINT " "
  863. 8530  NEXT I
  864. 8540  LOCATE 2,24
  865. 8550  PRINT TAB(80)
  866. 8560  LOCATE 13,24
  867. 8570  PRINT TAB(80)
  868. 8580  RESTORE
  869. 8590  FOR I=1 TO 17
  870. 8600  READ C(I)
  871. 8610  NEXT I
  872. 8620  RETURN
  873. 8630  GOSUB 15030
  874. 8640  LOCATE 15,20
  875. 8650  PRINT TAB(20) "Please type the letter of the function you want:"
  876. 8660  PRINT:PRINT TAB(20) "A. Register the screen display as a solution for a"
  877. 8670  PRINT TAB(20) "   second player to solve immediately."
  878. 8680  PRINT TAB(20) "B. Store the screen display for solution by someone at"
  879. 8690  PRINT TAB(20) "   some future time."
  880. 8691  LOCATE 25,1,0
  881. 8692  PRINT TAB(20) "To escape save routine, press `Escape' key.";
  882. 8700  B$=INKEY$:IF B$="" THEN 8700
  883. 8705  IF B$=CHR$(27) THEN 9410
  884. 8710  IF B$="B" OR B$="b" THEN 8840
  885. 8720  IF B$<>"A" AND B$<>"a" THEN 8700
  886. 8730  CLS
  887. 8740  F=0
  888. 8750  FOR ROWV=1 TO 8
  889. 8760  FOR COLV=1 TO 8
  890. 8770  B(ROWV,COLV)=S(ROWV,COLV)
  891. 8780  IF S(ROWV,COLV)=-1 THEN F=F+1
  892. 8790  NEXT COLV
  893. 8800  NEXT ROWV
  894. 8810  CRE=0
  895. 8820  ERASE S
  896. 8830  RETURN 620
  897. 8840  GOSUB 15030
  898. 8850  ON ERROR GOTO 15370
  899. 8860  GOSUB 180
  900. 8870  OPEN "BLKBX1" AS 1 LEN=128
  901. 8880  OPEN "BLKBX1" AS 2 LEN=128
  902. 8890  FIELD 1,1 AS KYY$,2 AS NMM$,3 AS INIT$,10 AS DTE$,100 AS CMM$
  903. 8900  FOR ROW=1 TO 8
  904. 8910  FOR COL=1 TO 8
  905. 8920  FIELD 2,((ROW-1)*16)+((COL-1)*2) AS X$,2 AS B$(ROW,COL)
  906. 8930  NEXT COL
  907. 8940  NEXT ROW
  908. 8950  GET 1,4
  909. 8960  I=4
  910. 8970  WHILE KYY$="*"
  911. 8980  I=I+2
  912. 8990  GET 1,I
  913. 9000  WEND
  914. 9002  LSET NMM$=MKI$(F)
  915. 9010  RECNO=I-2
  916. 9040  LOCATE 15,1
  917. 9050  KEY(14) ON
  918. 9060  KEY(11) ON
  919. 9070  KEY(12) ON
  920. 9080  KEY(13) ON
  921. 9090  PRINT "Please type in your initials (3 characters max.) and press `Enter' to register:"
  922. 9100  ON KEY(11) GOSUB 9200
  923. 9110  ON KEY(12) GOSUB 9120:GOTO 9150
  924. 9120  LOCATE CSRLIN,POS(0)-1
  925. 9130  IF POS(0)=34 THEN LOCATE 18,35
  926. 9140  RETURN
  927. 9150  ON KEY(13) GOSUB 9160:GOTO 9190
  928. 9160  LOCATE CSRLIN,POS(0)+1
  929. 9170  IF POS(0)=38 THEN LOCATE 18,37
  930. 9180  RETURN
  931. 9190  ON KEY(14) GOSUB 9200:GOTO 9210
  932. 9200  RETURN
  933. 9210  COLOR 1,0
  934. 9220  LOCATE 18,35,0
  935. 9230  PRINT "   "
  936. 9240  LOCATE 18,35,1,1,12
  937. 9250  B$=INKEY$:IF B$="" THEN 9250
  938. 9260  IF ASC(B$)=8 THEN 9330
  939. 9270  IF B$=CHR$(27) THEN 9410
  940. 9280  IF ASC(B$)=13 THEN 9360
  941. 9290  IF ASC(B$)<32 OR ASC(B$)>127 THEN 9250
  942. 9300  PRINT B$;
  943. 9310  IF POS(0)=38 THEN LOCATE 18,37
  944. 9320  GOTO 9250
  945. 9330  PRINT " ";:LOCATE CSRLIN,POS(0)-2
  946. 9340  IF POS(0)=34 THEN LOCATE 18,35
  947. 9350  GOTO 9250
  948. 9360  LOCATE ,,0
  949. 9370  IINIT$=""
  950. 9380  FOR I=35 TO 37
  951. 9390  IINIT$=IINIT$+CHR$(SCREEN(18,I))
  952. 9400  NEXT I
  953. 9410  COLOR 7,0
  954. 9420  IF B$<>CHR$(27) THEN 9520
  955. 9430  LOCATE 25,1,0
  956. 9440  PRINT TAB(80)
  957. 9450  GOSUB 15030
  958. 9460  CLOSE
  959. 9470  KEY(11) OFF
  960. 9480  KEY(12) OFF
  961. 9490  KEY(13) OFF
  962. 9500  KEY(14) OFF
  963. 9510  RETURN
  964. 9520  LSET INIT$=IINIT$
  965. 9530  LOCATE 15,1
  966. 9540  PRINT "Please type in the date (10 characters max.) and press `Enter' to register:    "
  967. 9550  ON KEY(11) GOSUB 9650
  968. 9560  ON KEY(12) GOSUB 9570:GOTO 9600
  969. 9570  LOCATE CSRLIN,POS(0)-1
  970. 9580  IF POS(0)=31 THEN LOCATE 18,32
  971. 9590  RETURN
  972. 9600  ON KEY(13) GOSUB 9610:GOTO 9640
  973. 9610  LOCATE CSRLIN,POS(0)+1
  974. 9620  IF POS(0)=42 THEN LOCATE 18,41
  975. 9630  RETURN
  976. 9640  ON KEY(14) GOSUB 9650:GOTO 9660
  977. 9650  RETURN
  978. 9660  COLOR 1,0
  979. 9670  LOCATE 18,32,0
  980. 9680  PRINT "          "
  981. 9690  LOCATE 18,32,1,1,12
  982. 9700  B$=INKEY$:IF B$="" THEN 9700
  983. 9710  IF ASC(B$)=8 THEN 9780
  984. 9720  IF B$=CHR$(27) THEN 9410
  985. 9730  IF ASC(B$)=13 THEN 9810
  986. 9740  IF ASC(B$)<32 OR ASC(B$)>127 THEN 9700
  987. 9750  PRINT B$;
  988. 9760  IF POS(0)=42 THEN LOCATE 18,41
  989. 9770  GOTO 9700
  990. 9780  PRINT " ";:LOCATE 18,POS(0)-2
  991. 9790  IF POS(0)=31 THEN LOCATE 18,32
  992. 9800  GOTO 9700
  993. 9810  LOCATE ,,0
  994. 9820  IDTE$=""
  995. 9830  FOR I=32 TO 41
  996. 9840  IDTE$=IDTE$+CHR$(SCREEN(18,I))
  997. 9850  NEXT I
  998. 9860  COLOR 7,0
  999. 9870  LSET DTE$=IDTE$
  1000. 9880  LOCATE 15,1,0
  1001. 9890  PRINT "Type in any comment or description you would like to save along with the setup  (100 characters maximum) and press `Enter' to register:"
  1002. 9900  ON KEY(11) GOSUB 9910:GOTO 9930
  1003. 9910  IF CSRLIN=19 THEN LOCATE 18,POS(0)
  1004. 9920  RETURN
  1005. 9930  ON KEY(12) GOSUB 9940:GOTO 9970
  1006. 9940  LOCATE CSRLIN,POS(0)-1
  1007. 9950  IF POS(0)=15 THEN LOCATE CSRLIN,16
  1008. 9960  RETURN
  1009. 9970  ON KEY(13) GOSUB 9980:GOTO 10010
  1010. 9980  LOCATE CSRLIN,POS(0)+1
  1011. 9990  IF POS(0)=66 THEN LOCATE CSRLIN,65
  1012. 10000  RETURN
  1013. 10010  ON KEY(14) GOSUB 10020:GOTO 10040
  1014. 10020  IF CSRLIN=18 THEN LOCATE 19,POS(0)
  1015. 10030  RETURN
  1016. 10040  COLOR 1,0
  1017. 10050  LOCATE 18,16,0
  1018. 10060  PRINT TAB(66)
  1019. 10070  LOCATE 19,16
  1020. 10080  PRINT TAB(66)
  1021. 10090  LOCATE 18,16,1,1,12
  1022. 10100  B$=INKEY$:IF B$="" THEN 10100
  1023. 10110  IF ASC(B$)=8 THEN 10190
  1024. 10120  IF B$=CHR$(27) THEN 9410
  1025. 10130  IF ASC(B$)=13 THEN 10230
  1026. 10140  IF ASC(B$)<32 OR ASC(B$)>127 THEN 10100
  1027. 10150  PRINT B$;
  1028. 10160  IF CSRLIN=18 AND POS(0)=66 THEN LOCATE 19,16
  1029. 10170  IF CSRLIN=19 AND POS(0)=66 THEN LOCATE 19,65
  1030. 10180  GOTO 10100
  1031. 10190  PRINT " ";:LOCATE CSRLIN,POS(0)-2
  1032. 10200  IF CSRLIN=18 AND POS(0)=15 THEN LOCATE 18,16
  1033. 10210  IF CSRLIN=19 AND POS(0)=15 THEN LOCATE 18,65
  1034. 10220  GOTO 10100
  1035. 10230  LOCATE ,,0
  1036. 10240  COLOR 7,0
  1037. 10250  ICMM$=""
  1038. 10260  FOR I=18 TO 19
  1039. 10270  FOR J=16 TO 65
  1040. 10280  ICMM$=ICMM$+CHR$(SCREEN(I,J))
  1041. 10290  NEXT J
  1042. 10300  NEXT I
  1043. 10310  COLOR 7,0
  1044. 10320  GOSUB 15030
  1045. 10330  LSET CMM$=ICMM$
  1046. 10340  LSET KYY$="*"
  1047. 10350  F%=0
  1048. 10360  FOR ROWV=1 TO 8
  1049. 10370  FOR COLV=1 TO 8
  1050. 10380  IF S(ROWV,COLV)<>-1 THEN 10410
  1051. 10390  F%=F%+1
  1052. 10400  LSET B$(ROWV,COLV)=MKI$(-1):GOTO 10420
  1053. 10410  LSET B$(ROWV,COLV)=MKI$(0)
  1054. 10420  NEXT COLV
  1055. 10430  NEXT ROWV
  1056. 10440  LSET NMM$=MKI$(F%)
  1057. 10450  LOCATE ,,0
  1058. 10460  LOCATE 15,1
  1059. 10470  PRINT "All data has been registered.  Press `Enter' to save on the disk."
  1060. 10480  B$=INKEY$:IF B$="" THEN 10480
  1061. 10490  IF B$=CHR$(27) THEN 9430
  1062. 10500  IF ASC(B$)<>13 THEN 10480
  1063. 10510  PUT 1,RECNO+2
  1064. 10520  PUT 2,RECNO+1
  1065. 10530  CLOSE
  1066. 10540  LOCATE 25,1,0
  1067. 10550  PRINT TAB(80)
  1068. 10560  LOCATE 15,1
  1069. 10570  PRINT TAB(10) "Your data and display are saved as record #";CINT(RECNO/2) TAB(80)
  1070. 10571  COLOR 7,0
  1071. 10572  LOCATE 8,1
  1072. 10573  PRINT "Displayed:";CINT(RECNO/2);"  "
  1073. 10580  LOCATE 18,20
  1074. 10590  PRINT "Press any key to return to the menu."
  1075. 10600  B$=INKEY$:IF B$="" THEN 10600
  1076. 10610  GOTO 9430
  1077. 10620  CLS
  1078. 10630  LOCATE 10,1
  1079. 10640  PRINT "Do you want to see a listing of what is available on the disk (Y/N)?"
  1080. 10650  B$=INKEY$:IF B$="" THEN 10650
  1081. 10660  IF B$="Y" OR B$="y" THEN GOSUB 11100:GOTO 10680
  1082. 10670  IF B$<>"N" AND B$<>"n" THEN 10650
  1083. 10680  LOCATE 10,1,0,1,12
  1084. 10690  PRINT "Type in the record # of the solution you want to solve for (3 characters max.)  then press `Enter' for the computer to load the record."
  1085. 10700  LOCATE 15,1,0:PRINT TAB(20) "(Pressing `X' will escape from the selection mode)"
  1086. 10710  COLOR 1,0:LOCATE 13,38,0:PRINT "   " :LOCATE 13,38,1
  1087. 10720  B$=INKEY$:IF B$="" THEN 10720
  1088. 10730  IF B$="X" OR B$="x" THEN COLOR 7,0:GOTO 460
  1089. 10740  IF ASC(B$)=13 THEN 10810
  1090. 10750  IF ASC(B$)=8 THEN 10790
  1091. 10760  IF ASC(B$)>57 OR ASC(B$)<47 THEN 10720
  1092. 10770  PRINT B$;:IF POS(0)=41 THEN LOCATE 13,40
  1093. 10780  GOTO 10720
  1094. 10790  IF POS(0)=38 THEN 10720
  1095. 10800  PRINT " ";:LOCATE CSRLIN,POS(0)-2:GOTO 10720
  1096. 10810  B$="":COLOR 7,0:LOCATE ,,0
  1097. 10820  B$=B$+CHR$(SCREEN(CSRLIN,38))
  1098. 10830  B$=B$+CHR$(SCREEN(CSRLIN,39))
  1099. 10840  B$=B$+CHR$(SCREEN(CSRLIN,40))
  1100. 10850  CELL=VAL(B$)
  1101. 10860  ON ERROR GOTO 15370
  1102. 10870  GOSUB 180
  1103. 10880  OPEN "BLKBX1" AS 1 LEN=128
  1104. 10890  OPEN "BLKBX1" AS 2 LEN=128
  1105. 10900  FIELD 1,1 AS KYY$,2 AS NMM$,3 AS INIT$,10 AS DTE$,100 AS CMM$
  1106. 10910  FOR ROW=1 TO 8
  1107. 10920  FOR COL=1 TO 8
  1108. 10930  FIELD 2,((ROW-1)*16)+((COL-1)*2) AS X$,2 AS B$(ROW,COL)
  1109. 10940  NEXT COL
  1110. 10950  NEXT ROW
  1111. 10960  GET 1,CELL*2+2
  1112. 10970  IF KYY$<>"*" THEN 12000
  1113. 10980  GET 2,(CELL*2)+1
  1114. 10990  F=0
  1115. 11000  FOR ROWV=1 TO 8
  1116. 11010  FOR COLV=1 TO 8
  1117. 11020  B(ROWV,COLV)=CVI(B$(ROWV,COLV))
  1118. 11030  IF B(ROWV,COLV)=-1 THEN F=F+1
  1119. 11040  NEXT COLV
  1120. 11050  NEXT ROWV
  1121. 11060  CLOSE
  1122. 11070  CLS
  1123. 11080  GOTO 620
  1124. 11100  CLS
  1125. 11110  LOCATE 1,1,0
  1126. 11120  PRINT STRING$(80,196);"RECORD  # OF  MADE                                                                #    ROCKS   BY   DATE                       DESCRIPTION                      ";STRING$(80,196);
  1127. 11130  LOCATE 25,1
  1128. 11140  PRINT "Press space bar to continue listing or `ESCAPE' to leave list mode.";
  1129. 11150  LOCATE 5,1
  1130. 11160  OPEN "BLKBX1" AS 1 LEN=128
  1131. 11170  FIELD 1,1 AS KYY$,2 AS NMM$,3 AS INIT$,10 AS DTE$,100 AS CMM$
  1132. 11180  COLOR 7,0
  1133. 11190  I=4:GON$=""
  1134. 11195  GET 1,I
  1135. 11200  WHILE (KYY$="*" OR KYY$="!") AND GON$<>CHR$(27)
  1136. 11201  IF KYY$="!" THEN 11300
  1137. 11210  IF CSRLIN<23 THEN 11260
  1138. 11220  GON$=INKEY$:IF GON$="" THEN 11220
  1139. 11230  IF GON$=CHR$(32) THEN LOCATE 5,1,0:GOTO 11260
  1140. 11240  IF GON$=CHR$(27) THEN 11200
  1141. 11250  GOTO 11220
  1142. 11252  GET 1,I
  1143. 11255  IF I/2-1<10 THEN PRINT " ";
  1144. 11257  IF I/2-1<100 THEN PRINT " ";
  1145. 11260  PRINT " ";I/2-1;"    ";CVI(NMM$);"   ";INIT$;"  ";
  1146. 11265  PRINT DTE$;LEFT$(CMM$,50);
  1147. 11270  PRINT "                             ";
  1148. 11280  COLOR 1,0
  1149. 11290  PRINT MID$(CMM$,51,50)
  1150. 11300  COLOR 7,0
  1151. 11310  I=I+2
  1152. 11315  GET 1,I
  1153. 11320  WEND
  1154. 11330  IF GON$=CHR$(27) THEN 11380
  1155. 11340  IF I>4 THEN PRINT "                        End of Listing                                         " ELSE PRINT "                       No Records on This Disk"
  1156. 11350  WHILE CSRLIN<23
  1157. 11360  PRINT TAB(80):PRINT
  1158. 11370  WEND
  1159. 11372  GON$=INKEY$:IF GON$="" THEN 11372
  1160. 11380  CLS
  1161. 11385  CLOSE 1
  1162. 11390  RETURN
  1163. 12000  COLOR 7,0
  1164. 12005  CLS
  1165. 12010  LOCATE 10,1,0
  1166. 12015  CLOSE 1:CLOSE 2
  1167. 12020  PRINT "Record #";CELL;"does not exist.  Press `L' to see a listing of available records,":PRINT "`R' to retry with another number, or `X' to escape form the selection mode."
  1168. 12030  STRT$=INKEY$:IF STRT$="" THEN 12030
  1169. 12040  IF STRT$="R" OR STRT$="r" THEN CLS:GOTO 10680
  1170. 12050  IF STRT$="L" OR STRT$="l" THEN 11100
  1171. 12060  IF STRT$="X" OR STRT$="x" THEN 460
  1172. 12070  GOTO 12030
  1173. 12500  GOSUB 15030
  1174. 12510  LOCATE 15,2
  1175. 12520  PRINT "Do you want to see a listing of what is available on the disk (Y/N)?"
  1176. 12530  GO$=INKEY$:IF GO$="" THEN 12530
  1177. 12540  IF GO$="Y" OR GO$="y" THEN GOSUB 11100:GOTO 12560
  1178. 12550  IF GO$<>"N" AND GO$<>"n" THEN 12530 ELSE 12630
  1179. 12560  COLOR 7,0
  1180. 12570  CRE=2
  1181. 12580  GOSUB 540
  1182. 12590  COLOR 7,0
  1183. 12600  LOCATE 7,1
  1184. 12610  PRINT "Record #"
  1185. 12620  PRINT "Displayed: None"
  1186. 12630  LOCATE 25,1
  1187. 12640  PRINT TAB(20) "Pressing `X' will escape from the load/delete mode.";
  1188. 12650  LOCATE 15,1,0,1,12
  1189. 12660  PRINT "Type in the record # of the record you want to display (3 characters max.)      then press `Enter' for the computer to load the record."
  1190. 12670  COLOR 1,0:LOCATE 18,38,0:PRINT "   " :LOCATE 18,38,1
  1191. 12680  B$=INKEY$:IF B$="" THEN 12680
  1192. 12690  IF B$="X" OR B$="x" THEN COLOR 7,0:CLOSE:LOCATE 25,1,0:PRINT TAB(80):RETURN 8081
  1193. 12700  IF ASC(B$)=13 THEN 12770
  1194. 12710  IF ASC(B$)=8 THEN 12750
  1195. 12720  IF ASC(B$)>57 OR ASC(B$)<47 THEN 12680
  1196. 12730  PRINT B$;:IF POS(0)=41 THEN LOCATE 13,40
  1197. 12740  GOTO 12680
  1198. 12750  IF POS(0)=38 THEN 12680
  1199. 12760  PRINT " ";:LOCATE CSRLIN,POS(0)-2:GOTO 12680
  1200. 12770  B$="":COLOR 7,0:LOCATE ,,0
  1201. 12780  B$=B$+CHR$(SCREEN(CSRLIN,38))
  1202. 12790  B$=B$+CHR$(SCREEN(CSRLIN,39))
  1203. 12800  B$=B$+CHR$(SCREEN(CSRLIN,40))
  1204. 12810  CELL=VAL(B$)
  1205. 12820  ON ERROR GOTO 15370
  1206. 12825  GOSUB 15030
  1207. 12830  GOSUB 180
  1208. 12840  OPEN "BLKBX1" AS 1 LEN=128
  1209. 12850  OPEN "BLKBX1" AS 2 LEN=128
  1210. 12860  FIELD 1,1 AS KYY$,2 AS NMM$,3 AS INIT$,10 AS DTE$,100 AS CMM$
  1211. 12870  FOR ROW=1 TO 8
  1212. 12880  FOR COL=1 TO 8
  1213. 12890  FIELD 2,((ROW-1)*16)+((COL-1)*2) AS X$,2 AS B$(ROW,COL)
  1214. 12900  NEXT COL
  1215. 12910  NEXT ROW
  1216. 12920  GET 1,CELL*2+2
  1217. 12930  IF KYY$<>"*" THEN 14800
  1218. 12940  GET 2,(CELL*2)+1
  1219. 12950  F=0
  1220. 12960  FOR ROWV=1 TO 8
  1221. 12970  FOR COLV=1 TO 8
  1222. 12980  B(ROWV,COLV)=CVI(B$(ROWV,COLV))
  1223. 12990  IF B(ROWV,COLV)=-1 THEN F=F+1
  1224. 13000  NEXT COLV
  1225. 13010  NEXT ROWV
  1226. 13020  CLOSE
  1227. 13030  FOR I=1 TO 8:FOR J=1 TO 8
  1228. 13040  S(I,J)=B(I,J)
  1229. 13050  NEXT J:NEXT I
  1230. 13060  FOR I=4 TO 11
  1231. 13070  FOR J=30 TO 51 STEP 3
  1232. 13080  LOCATE I,J-1,0
  1233. 13090  IF B(I-3,J/3-9)=-1 THEN PRINT "(";CHR$(2);")" ELSE PRINT "   "
  1234. 13100  NEXT J
  1235. 13110  NEXT I
  1236. 13120  LOCATE 8,1
  1237. 13130  PRINT "Displayed:";CELL;"  "
  1238. 13140  LOCATE 15,1,0
  1239. 13150  PRINT STRING$(79,196)
  1240. 13151  PRINT "RECORD  # OF  MADE                                                                #    ROCKS   BY   DATE                       DESCRIPTION                      ";STRING$(79,196);
  1241. 13160  LOCATE 19,1,0
  1242. 13170  OPEN "BLKBX1" AS 1 LEN=128
  1243. 13180  FIELD 1,1 AS KYY$,2 AS NMM$,3 AS INIT$,10 AS DTE$,100 AS CMM$
  1244. 13190  COLOR 7,0
  1245. 13200  I=CELL*2+2
  1246. 13205  GET 1,I
  1247. 13210  IF I/2-1<10 THEN PRINT " ";
  1248. 13220  IF I/2-1<100 THEN PRINT " ";
  1249. 13230  PRINT I/2-1;"   ";CVI(NMM$);"   ";INIT$;"  ";
  1250. 13240  PRINT DTE$;LEFT$(CMM$,50);
  1251. 13250  PRINT "                             ";
  1252. 13260  COLOR 1,0
  1253. 13270  PRINT MID$(CMM$,51,50)
  1254. 13280  COLOR 7,0
  1255. 13290  PRINT :PRINT TAB(20) "Do you want to delete this record (Y/N)?"
  1256. 13300  GO$=INKEY$:IF GO$="" THEN 13300
  1257. 13310  IF GO$="X" OR GO$="x" OR GO$="N" OR G$="n" THEN 13350
  1258. 13320  IF GO$<>"y" AND GO$<>"Y" THEN 13300
  1259. 13330  LSET KYY$="!"
  1260. 13340  PUT 1,I
  1261. 13350  CLOSE:COLOR 7,0:LOCATE 25,1,0:PRINT TAB(79);:GOSUB 15030:RETURN 8081
  1262. 14800  COLOR 7,0
  1263. 14810  GOSUB 15030
  1264. 14820  LOCATE 15,1,0
  1265. 14830  CLOSE 1:CLOSE 2
  1266. 14840  PRINT "Record #";CELL;"does not exist.  Press `L' to see a listing of available records,":PRINT "`R' to retry with another number, or `X' to escape form the selection mode."
  1267. 14850  STRT$=INKEY$:IF STRT$="" THEN 14850
  1268. 14860  IF STRT$="R" OR STRT$="r" THEN RETURN 12630
  1269. 14870  IF STRT$="L" OR STRT$="l" THEN GOSUB 11100:RETURN 12560
  1270. 14880  IF STRT$="X" OR STRT$="x" THEN COLOR 7,0:CLOSE:LOCATE 25,1,0:PRINT TAB(80):RETURN 8081
  1271. 14890  GOTO 14850
  1272. 15000  GOSUB 15030
  1273. 15001  LOCATE 15,1
  1274. 15002  PRINT TAB(20) "Please verify end create routine (Y/N)?"
  1275. 15003  GO$=INKEY$: IF GO$="" THEN 15003
  1276. 15004  IF GO$="Y" OR GO$="y" THEN 15008
  1277. 15005  IF GO$<>"n" AND GO$<>"N" THEN 15003
  1278. 15006  GOTO 8090
  1279. 15008  CRE=0
  1280. 15009  ON ERROR GOTO 15011
  1281. 15010  ERASE S:GOTO 15013
  1282. 15011  IF ERR<>5 THEN 15019
  1283. 15012  RESUME 15013
  1284. 15013  ON ERROR GOTO 15015
  1285. 15014  ERASE B:GOTO 15019
  1286. 15015  IF ERR<>5 THEN 15019
  1287. 15016  RESUME 15019
  1288. 15019  ON ERROR GOTO 0
  1289. 15020  GOTO 460
  1290. 15030  LOCATE 15,1
  1291. 15040  FOR I=1 TO 9
  1292. 15050  PRINT BL$
  1293. 15060  NEXT I
  1294. 15070  RETURN
  1295. 15080  FOR I=1 TO 8
  1296. 15090  LOCATE I+3,29
  1297. 15100  WHILE POS(0)<53
  1298. 15110  IF SCREEN(CSRLIN,POS(0))=40 THEN LOCATE ,POS(0)+3:GOTO 15130
  1299. 15120  PRINT " ";
  1300. 15130  WEND
  1301. 15140  NEXT I
  1302. 15150  RETURN
  1303. 15160  I=1
  1304. 15170  WHILE C(I)=0
  1305. 15180  I=I+1
  1306. 15190  WEND
  1307. 15200  IF SCREEN (20,20)<>72 AND SCREEN (20,21)<>101 AND (SCREEN(CSRLIN,POS(0))=0      OR SCREEN(CSRLIN,POS(0))=32) THEN PRINT CHR$(C(I))
  1308. 15210  IF P>8 THEN 15240
  1309. 15220  LOCATE P+3,24
  1310. 15230  GOTO 15310
  1311. 15240  IF P>16 THEN 15270
  1312. 15250  LOCATE 13,P*3+3
  1313. 15260  GOTO 15310
  1314. 15270  IF P>24 THEN 15300
  1315. 15280  LOCATE 28-P,57
  1316. 15290  GOTO 15310
  1317. 15300  LOCATE 2,126-P*3
  1318. 15310  IF SCREEN(20,20)=72 THEN COLOR 15,0:PRINT "H":COLOR 7,0:GOTO 15350
  1319. 15320  IF SCREEN(20,21)=101 THEN COLOR 15,0:PRINT "R":COLOR 7,0:GOTO 15350
  1320. 15330  IF SCREEN(CSRLIN,POS(0))=0 OR SCREEN(CSRLIN,POS(0))=32 THEN PRINT CHR$(C(I)) ELSE GOTO 15350
  1321. 15340  C(I)=0
  1322. 15350  RETURN
  1323. 15360  FOR Y=1 TO 8:FOR Z=1 TO 8:PRINT B(Y,Z);:NEXT Z:PRINT :NEXT Y
  1324. 15370  IF ERR<>70 THEN 15420
  1325. 15380  LOCATE 15,1
  1326. 15390  PRINT "Disk is write protected.  Remove the protect tab or replace the disk with an    unprotected one and press any key to restart."
  1327. 15400  RESUME 15410
  1328. 15410  B$=INKEY$:IF B$<>"" THEN RETURN ****
  1329. 15420  IF ERR<>71 THEN 15470
  1330. 15430  LOCATE 15,1
  1331. 15440  PRINT "Disk not ready.  Check to make sure a disk is in the drive and that the door is closed properly, then press any key."
  1332. 15450  RESUME 15460
  1333. 15460  B$=INKEY$:IF B$<>"" THEN 8840 ELSE 15460
  1334. 15470  ON ERROR GOTO 0
  1335.